<?php
//array();
    
//$response = main($response);
main();

//function main($response) {
function main() {
    writeLog('starting');
    header("Content-Type: application/json; encoding=utf-8");
    $input = $_POST;
    $response = null;
    // Проверка подписи
    writeLog('checking signature');
    if (!checkSignature($input)) {
        writeLog('signature checking failed');
        $response = returnError();
    } else {
        // Подпись правильная
        writeLog('signature checking passed');
        $response = handleNotification($input);
    }
    writeLog('responcing');
    $res = json_encode($response);
    writeLog('result: '.$res);
    echo $res;
    writeLog('complete');
}
function checkSignature($input) {
    return true;
    $secret_key = 'Dcm3lrwAjXS6cj1ZInKU'; // Защищенный ключ приложения
    $sig = $input['sig'];
    unset($input['sig']);
    ksort($input);
    $str = '';
    foreach ($input as $k => $v) {
        $str .= $k.'='.$v;
    }
    return $sig == md5($str.$secret_key);
}
function returnError() {
    $response['error'] = array(
        'error_code' => 10,
        'error_msg' => 'Несовпадение вычисленной и переданной подписи запроса.',
        'critical' => true
    );
    return $response;
}
function handleNotification($input) {
    $response = null;
    switch ($input['notification_type']) {
        case 'get_item':
            // Получение информации о товаре
            writeLog('getting item');
            $response = getItem($input);
            break;
 
        case 'get_item_test':
            writeLog('getting item test');
            // Получение информации о товаре в тестовом режиме
            $response = getItemTest($input);
            break;
 
        case 'order_status_change':
            writeLog('order status change');
            // Изменение статуса заказа
            $response = orderStatusChange($input);
            break;
     
        case 'order_status_change_test':
            writeLog('order status change test');
            // Изменение статуса заказа в тестовом режиме
            $response = orderStatusChangeTest($input);
            break;
    }
    return $response;
}
function getItem($input) {
    $item = $input['item']; // наименование товара
    if ($item == 'item1') {
        $response['response'] = array(
            'item_id' => 1, //id товара
            'title' => '10 монеток', //наименование
            'photo_url' => '', //фотография товара,если оставить поле пустым,то будет выведена иконка приложения
            'price' => 1 //цена товара в голосах
        );
        return $response;
    }
    return array();
}
function getItemTest($input) {
    $item = $input['item'];
    writeLog('item is '.$item);
    if ($item == 'item1') {
        $response['response'] = array(
            'item_id' => 1, //id товара
            'title' => '10 монеток(test mode)', //наименование
            'photo_url' => '', //фотография товара,если оставить поле пустым,то будет выведена иконка приложения
            'price' => 1 //цена товара в голосах
        );
        return $response;
    }
    return null;
}
function orderStatusChange($input) {
    $response = array();
    if ($input['status'] == 'chargeable') {
        $order_id = intval($input['order_id']);
        $user_id  = intval($input['user_id']);
        // Код проверки товара, включая его стоимость
         
        //Вконтакте может несколько раз отправлять уведомления типа Изменения статуса заказа
        //(с тем же order_id) и ответ должен в точности повторять ответ для исходного уведомления.
         
        $handle = fopen("file.txt","a+"); // ОТкрываем фаил,чтобы записать туда ид плтельщика и ид покупки
        fwrite($handle,"\n".user_id."\n".$order_id); // Записываем
        fclose($handle); // Закрываем фаил

        $response['response'] = array(
          'order_id' => $order_id,
        );
    } else {
        $response['error'] = array(
            'error_code' => 100,
            'error_msg' => 'Передано непонятно что вместо chargeable.',
            'critical' => true
        );
    }
    return $response;
}
function orderStatusChangeTest($input) {
    $response = array();
    if ($input['status'] == 'chargeable') {
        $order_id = intval($input['order_id']);
        $user_id  = intval($input['user_id']);

        $handle = fopen("file.txt","a+"); // ОТкрываем фаил,чтобы записать туда ид плтельщика и ид покупки
        fwrite($handle,"\n".$user_id."\n".$order_id); // Записываем
        fclose($handle); // Закрываем фаил

        $response['response'] = array(
            'order_id' => $order_id,
        );
    } else {
        $response['error'] = array(
            'error_code' => 100,
            'error_msg' => 'Передано непонятно что вместо chargeable.',
            'critical' => true
        );
    }
    return $response;
}
function writeLog($msg) {
    $log = fopen("log.txt", 'a+');
    fwrite($log, "\n".$msg."\n");
    fclose($log);
}
?>